﻿class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ret = 0;
        for (int i = 0; i < 32; i++)
        {
            int sum = 0;
            for (int num : nums)
            {
                sum += (num >> i) & 1;
            }
            if (sum % 3 == 1)
                ret |= (1 << i);
        }
        return ret;
    }
};

//上面的语言有些抽象，我们举个例子：

//如果输入是：nums = [2,2,3,2]，那么它的各个元素对应的32位二进制数就是[00000000000000000000000000000010, 00000000000000000000000000000010, 00000000000000000000000000000011, 00000000000000000000000000000010]；
//接着，对这些二进制数的对应位进行求和，得到：[00000000000000000000000000000041]；
//对这个求和结果的每一位进行3的取模运算，得到：[00000000000000000000000000000011]；
//把上面的结果从二进制转换为十进制，就是：3。这就是我们的答案。

